package br.com.mestrefamiliar.bean;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.faces.event.ValueChangeEvent;
import javax.servlet.http.HttpServletRequest;

import br.com.mestrefamiliar.mestres.Mestres;
import br.com.mestrefamiliar.mestres.MestresRN;
import br.com.mestrefamiliar.usuario.Usuario;
import br.com.mestrefamiliar.usuario.UsuarioRN;

@ManagedBean
@SessionScoped
public class ContextoBean {
	
	private Usuario usuarioLogado = null;
	private List<Locale> idiomas = null;
	private Locale localizacao = null;
	private Mestres mestres = null;
	
	public Usuario getUsuarioLogado() {
		
		FacesContext context = FacesContext.getCurrentInstance();
		ExternalContext external = context.getExternalContext();
		String login = external.getRemoteUser();

		if (this.usuarioLogado == null || !login.equals(this.usuarioLogado.getLogin())) {

			if (login != null) {
				UsuarioRN usuarioRN = new UsuarioRN();
				this.usuarioLogado = usuarioRN.buscarPorLogin(login);
			}
		}
		return usuarioLogado;
	}
	
	public String getIP(){
		FacesContext context = FacesContext.getCurrentInstance();
		HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();
		return request.getRemoteAddr();
	}
	
	public List<Locale> getIdiomas() {
		FacesContext context = FacesContext.getCurrentInstance();
		Iterator<Locale> locales = context.getApplication().getSupportedLocales();
		this.idiomas = new ArrayList<Locale>();
		while (locales.hasNext()) {
			this.idiomas.add(locales.next());
		}
		return idiomas;
	}
	
	public void setIdiomaUsuario(String idioma) {
		UsuarioRN usuarioRN = new UsuarioRN();
		this.usuarioLogado = usuarioRN.carregar(this.getUsuarioLogado().getCodigo());
		this.usuarioLogado.setIdioma(idioma);
		usuarioRN.salvar(this.usuarioLogado);

		String[] info = idioma.split("_");
		Locale locale = new Locale(info[0], info[1]);

		FacesContext context = FacesContext.getCurrentInstance();
		context.getViewRoot().setLocale(locale);
	}
	
	public Locale getLocaleUsuario() {
		if (this.localizacao == null) {
			Usuario usuario = this.getUsuarioLogado();
			String idioma = usuario.getIdioma();
			String[] info = idioma.split("_");
			this.localizacao = new Locale(info[0], info[1]);
		}
		return this.localizacao;
	}
	
	public List<Mestres> getMestresFamiliares(){
		MestresRN mestresRN = new MestresRN();
		List<Mestres> lista = null;
		
		if(this.mestres == null){
			List<Mestres> listaMestres = mestresRN.listar();
			lista = listaMestres;
		}
		return lista;
	}
	
	public void setMestresFamiliares(ValueChangeEvent event){
		
		Integer mestre = (Integer) event.getNewValue();
		
		MestresRN mestresRN = new MestresRN();
		this.mestres = mestresRN.carregar(mestre);
	}

}
